<?php
/**
 * 控制器类
 */
class Controller {
    /**
     * 视图实例
     * @var View
     */
    private $_view;

    /**
     * 构造函数，初始化视图实例，调用hook
     */
    public function __construct(){
        $this->_view = new View();
        $this->_init();
    }

    /**
     * 前置hook
     */
    protected function _init(){

    }
    /**
     * 渲染模板并输出
     * @param null|string $tpl 模板文件路径
     * 参数为相对于ZeroPHP/tpl/文件的相对路径，不包含后缀名，例如home/index/index
     * 如果参数为空，则默认渲染$mod/$controller/$action.php
     * 如果参数不包含"/"，则默认渲染$controller/$tpl
     * @return void
     */
    protected function display($tpl=''){
        if($tpl === ''){//display参数为空的情况下
            $tplarr = array(sysC('mod'),sysC('c'),sysC('a'));
        }else{
            $tplarr = explode('/',$tpl);//以/分割参数为数组
            switch(count($tplarr)){
                case 1://如果参数只有一个那么渲染当前模块/控制器下的参数方法名模板
                    $tplarr = array_unshift($tplarr,sysC('mod'),sysC('c'));
                    break;
                case 2://如果参数有两个那么渲染当前模块下的参数控制器名/方法名模板
                    $tplarr = array_unshift($tplarr,sysC('mod'));
                    break;
                case 3:break;
                default:
                    halt('参数错误');
            }
        }

        $this->_view->display($tplarr);
    }
    /**
     * 为视图引擎设置一个模板变量
     * @param string $var 要在模板中使用的变量名
     * @param mixed $value 模板中该变量名对应的值
     * @return void
     */
    protected function assign($var,$value){
        $this->_view->assign($var,$value);
    }
    /**
     * 将数据用json格式输出至浏览器，并停止执行代码
     * @param array $data 要输出的数据
     */
    protected function ajaxReturn($data){
        echo json_encode($data);
        exit;
    }
    /**
     * 重定向至指定url
     * @param string $url 要跳转的url
     * @param void
     */
    protected function redirect($url){
        header("Location: $url");
        exit;
    }
}